package com.ceair.strategy.impl;

import com.ceair.entity.Oauth2ThirdAccount;
import com.ceair.strategy.Oauth2UserConverterStrategy;
import lombok.RequiredArgsConstructor;
import org.springframework.security.oauth2.core.user.OAuth2User;
import org.springframework.stereotype.Component;

import java.util.Map;

import static com.ceair.constant.SecurityConstants.THIRD_LOGIN_WECHAT;

/**
 * @author wangbaohai
 * @ClassName WechatUserConverter
 * @description: 微信用户信息转换器
 * @date 2024年11月28日
 * @version: 1.0.0
 */
@RequiredArgsConstructor
@Component(THIRD_LOGIN_WECHAT)
public class WechatUserConverter implements Oauth2UserConverterStrategy {

    /**
     * 将OAuth2用户对象转换为自定义的三方账户对象
     *
     * @param oAuth2User OAuth2用户对象，包含用户的基本信息和属性
     * @return 返回转换后的Oauth2ThirdAccount对象，用于表示第三方登录账户
     */
    @Override
    public Oauth2ThirdAccount convert(OAuth2User oAuth2User) {
        // 获取三方用户信息
        Map<String, Object> attributes = oAuth2User.getAttributes();
        // 转换至Oauth2ThirdAccount
        Oauth2ThirdAccount thirdAccount = new Oauth2ThirdAccount();
        // 设置唯一标识符
        thirdAccount.setUniqueId(String.valueOf(attributes.get("openid")));
        // 设置第三方用户名
        thirdAccount.setThirdUsername(oAuth2User.getName());
        // 设置账户类型为微信登录
        thirdAccount.setType(THIRD_LOGIN_WECHAT);
        // 设置用户地理位置
        thirdAccount.setLocation(attributes.get("province") + " " + attributes.get("city"));
        // 设置基础用户信息
        // 设置用户名
        thirdAccount.setName(oAuth2User.getName());
        // 设置用户头像URL
        thirdAccount.setAvatarUrl(String.valueOf(attributes.get("headimgurl")));
        // 返回转换后的三方账户对象
        return thirdAccount;
    }

}
